package com.mercury.ec.framework.air.core.client.impl.sunstn.dto.patex;

import cn.hutool.core.util.StrUtil;
import com.mercury.ec.framework.air.core.client.impl.sunstn.dto.SunstnCommonReqDTO;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.constraints.NotBlank;

/**
 * PATEX Request DTO
 *
 * @author hesx
 */
@Data
@NoArgsConstructor
public class SunstnPatexReqDTO extends SunstnCommonReqDTO {
    /**
     * 航班信息<hr/>
     * 航班信息为编码后字符串，明文格式如下：
     * CA8881|Y|CTUPEK|2007-08-12$CA8887|Q|PEKCTU|2007-08-16
     * 每个航段以字符“$”间隔，每个航段内的信息以“|”间隔，每个航段的项目顺序不能改变(注)
     */
    @NotBlank(message = "air_info不能为空")
    private String air_info;

    /**
     * 用来获取运价PID的office号
     */
    private String officecode;

    /**
     * 不允许预订后获取 PAT 信息（启用该参数后，一次性封口的航段将会返回失败）
     */
    private Integer nosd = 0;

    /**
     * 0:只返回最低的运价 1:返回所有的运价列表
     */
    private Integer allprice;

    /**
     * 是否以申请方式来生成 sd 指令
     */
    private Integer apply = 0;

    /**
     * 获取儿童运价
     */
    private Integer is_child = 0;

    /**
     * 获取婴儿运价
     */
    private Integer is_inf = 0;

    /**
     * 用户自定义执行 PAT 时的指令行，例如 PAT:AYD
     */
    private String pat_cmd;

    /**
     * 获取运价时，如果是以大客户编码方式获取，则需指令该大客户编码，如大客户编码为12345678，则系统在获取运价时，会执行指令：PAT:A#C12345678
     */
    private String customer_code = "";

    public SunstnPatexReqDTO(String officeCode, boolean allprice, boolean isChild, boolean isInf, String patCmd, String customerCode) {
        this.officecode = officeCode;
        this.allprice = allprice ? 1 : 0;
        this.is_child = isChild ? 1 : 0;
        this.is_inf = isInf ? 1 : 0;
        this.pat_cmd = patCmd;
        // 防止接口报错，未传值默认空串
        if (StrUtil.isNotBlank(customerCode)) {
            this.customer_code = customerCode;
        }
    }

    @Override
    public String getCmd() {
        return "PATEX";
    }
}
